package matrix;

import java.util.Iterator;

/**
 * Итератор для {@linkplain matrix.IRange Области} {@linkplain matrix.ICell Ячеек}.
 * Расширяет интерфейс {@linkplain java.util.Iterator Iterator}.
 * Дополнительные методы позволяют пробегать по строкам и столбцам {@linkplain matrix.IRange Области}
 */
public interface IRangeIterator extends Iterator<ICell> {
	/**
	 * @return true, если ещё есть строки для обработки (текущая строка меньше {@linkplain matrix.IRange#rows() количества строк} Области).
	 */
	abstract boolean hasNextRow();
	/**
	 * Должен возвращать следующую строку {@linkplain matrix.IRange Области}
	 * @return {@linkplain matrix.IRange IRange}, представляющий строку {@linkplain matrix.IRange Области}
	 */
	abstract IRange nextRow();
	/**
	 * @return true, если ещё есть столбцы для обработки (текущий столбец меньше {@linkplain matrix.IRange#columns() количества столбцов} Области).
	 */
	abstract boolean hasNextColumn();
	/**
	 * Должен возвращать следующий столбец {@linkplain matrix.IRange Области}
	 * @return {@linkplain matrix.IRange IRange}, представляющий столбец {@linkplain matrix.IRange Области}
	 */
	abstract IRange nextColumn();
}
